# Compilateur et linker

CC = g++
LD = g++

# Drapeaux
CFLAGS = -I $(INC) -lstring -liostream -lfstream

# Dossiers
BIN = ./
DEP = ./dep
INC = ./
OBJ = ./obj
RES = ./res
SRC = ./


# Nom du programme
EXEC = moduleImage


# Création de la liste des objets à partir de celle des sources
CSRCS = $(wildcard $(SRC)/*.cpp)
OBJS = $(CSRCS:$(SRC)/%.cpp=$(OBJ)/%.o)
DEPS = $(CSRCS:$(SRC)/%.cpp=$(DEP)/%.d)

# Règle par défaut
all: $(BIN)/$(EXEC) clean-exec

# Génération du binaire exécutable
$(BIN)/$(EXEC): $(OBJS)
	@mkdir -p $(BIN)
	$(LD) -o $@ $^ $(LDFLAGS) 

# Génération des fichiers objets
$(OBJ)/%.o: $(SRC)/%.cpp
	@mkdir -p $(OBJ)
	$(CC) $(CFLAGS) -o $@ -c $< 

# Génération des dépendances
$(DEP)/%.d: $(SRC)/%.cpp
	@mkdir -p $(DEP)
	$(CC) $(CFLAGS) -MM -MD -o $@ $<

# Inclusion des dépendances
-include $(DEPS)

.PHONY: all exec clean distclean eradicator tmpclean

# Règle d'exécution du programme avec fichier de test
exec: $(BIN)/$(EXEC)
	@echo Test du programme :
	$(BIN)/$(EXEC) #$(RES)/$(TEST_FILE)

# Règle de nettoyage des fichiers intermédiaires
clean:  clean-exec
	rm -rf $(EXEC)
	

# Règle de nettoyage avant make
clean-exec:
	rm -rf $(OBJ) $(DEP)


# Règle de nettoyage des fichiers temporaires de l'éditeur
tmpclean:
	rm -rf $(SRC)/*~ $(INC)/*~ ./*~
